/*
 * stemplate.c
 *
 *  Created on: 2013-5-20
 *      Author: xkaying
 */


#include "stemplate.h"
#include "../common/list.h"

#include <assert.h>
#include <stdio.h>
#include <stdlib.h>

struct _stemplateparam{
		List *values;
};

typedef struct _stemplateitem{
		SDeclare *pdeclare;
		STemplateParam *range;//模板范围,可能为0
}STemplateItem;

struct _stemplate{
		List *items;
};

STemplateParam *STemplateParamInit()
{
	STemplateParam *ptemp;
	ptemp=(STemplateParam*)malloc(sizeof(STemplateParam));
	ptemp->values=0;
	return ptemp;
}

void STemplateParamAppend(STemplateParam *pt,SValue *pvalue)
{
	assert(pt);
	assert(pvalue);
	if(pt->values==0){
		pt->values=ListInit();
	}
	ListPush(pt->values,pvalue);
}

STemplate *STemplateInit()
{
	STemplate *ptemp;
	ptemp=(STemplate*)malloc(sizeof(STemplate));
	ptemp->items=0;
	return ptemp;
}

void STemplateAppend(STemplate *pt,SDeclare *pdeclare)
{
	assert(pt);
	assert(pdeclare);
	if(pt->items==0){
		pt->items=ListInit();
	}
	STemplateItem *pitem;
	pitem=(STemplateItem*)malloc(sizeof(STemplateItem));
	pitem->pdeclare=pdeclare;
	pitem->range=0;
}


void TemplateItemAppendRange(STemplate *pt,SValue *range)
{
	assert(pt);
	assert(pt->items);
	assert(range);
	STemplateItem *pitem;
	pitem=(STemplateItem*)ListEnd(pt->items);
	if(pitem->range==0){
		pitem->range=STemplateParamInit();
	}
	STemplateParamAppend(pitem->range,range);
}


